<

ページ遷移は ZoomPageTransitionsBuilder に置き換えられました

まとめ

ライブラリが最新の OEM 動作に確実に従うようにするために、 デフォルトのページ遷移ビルダーが現在使用しているZoomPageTransitionsBuilderすべてのプラットフォーム (iOS と macOS を除く) それ以外のFadeUpwardsPageTransitionsBuilder

コンテクスト

FadeUpwardsPageTransitionsBuilder(最初の製品に付属 Flutter リリース)、ページ遷移を定義しました。 Android O で提供されるものと同様です。このページはビルダーを遷移します。 Flutter によると、最終的には Android で非推奨になる予定です非推奨ポリシー

ZoomPageTransitionsBuilder、新しいページ遷移ビルダー Android、Linux、Windows では、次のようなページ遷移が定義されています。 Android Q および R によって提供されるもの。

によるFlutter リポジトリのスタイルガイド、 フレームワークは最新の OEM の動作に従います。 ページ遷移ビルダーを使用してFadeUpwardsPageTransitionsBuilderにすべて切り替わりますZoomPageTransitionsBuilder。 現在のときTargetPlatform持っていないPageTransitionsBuilderで定義されているThemeData.pageTransitionsThemeZoomPageTransitionsBuilderがデフォルトとして使用されます。

変更内容の説明

PageTransitionsBuilderで定義されていますPageTransitionsTheme._defaultBuildersから変わりましたFadeUpwardsPageTransitionsBuilderZoomPageTransitionsBuilderためにTargetPlatform.androidTargetPlatform.linuxTargetPlatform.windows

移行ガイド

前のページ遷移ビルダーに戻りたい場合 (FadeUpwardsPageTransitionsBuilder)、ビルダーを定義する必要があります ターゲット プラットフォームに対して明示的に。

移行前のコード:

MaterialApp(
  theme: ThemeData(primarySwatch: Colors.blue),
)

移行後のコード:

MaterialApp(
  theme: ThemeData(
    pageTransitionsTheme: const PageTransitionsTheme(
      builders: <TargetPlatform, PageTransitionsBuilder>{
        TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(), // Apply this to every platforms you need.
      },
    ),
  ),
)

同じページ遷移ビルダーをすべてのプラットフォームに適用する場合:

MaterialApp(
  theme: ThemeData(
    pageTransitionsTheme: PageTransitionsTheme(
      builders: Map<TargetPlatform, PageTransitionsBuilder>.fromIterable(
        TargetPlatform.values,
        value: (dynamic _) => const FadeUpwardsPageTransitionsBuilder(),
      ),
    ),
  ),
)

テストの移行

ウィジェットを見つけようとして失敗した場合は、要素が多すぎます新しいトランジションを使用すると、次のようなエラーが発生しました。

══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following StateError was thrown running a test:
Bad state: Too many elements

When the exception was thrown, this was the stack:
#0      Iterable.single (dart:core/iterable.dart:656:24)
#1      WidgetController.widget (package:flutter_test/src/controller.dart:69:30)
#2      main.<anonymous closure> (file:///path/to/your/test.dart:1:2)

を使用してテストを移行する必要があります。descendantの範囲Finder特定のウィジェット タイプを使用します。 以下はその例ですDataTableのテスト:

移行前のテスト:

final Finder finder = find.widgetWithIcon(Transform, Icons.arrow_upward);

移行後のテスト:

final Finder finder = find.descendant(
  of: find.byType(DataTable),
  matching: find.widgetWithIcon(Transform, Icons.arrow_upward),
);

通常、ファインダー スコープを移行する必要があるウィジェットは次のとおりです。TransformFadeTransitionScaleTransition、 とColoredBox

タイムライン

リリースされたバージョン: v2.13.0-1.0.pre
安定リリース: v3.0.0

参考文献

API ドキュメント:

  • ZoomPageTransitionsBuilder
  • FadeUpwardsPageTransitionsBuilder
  • PageTransitionsTheme

関連する問題:

  • 問題 43277

関連する PR:

  • PR 100812